package com.example.cscot.ui.studymap;

import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import androidx.lifecycle.ViewModelProvider;

import com.example.cscot.LewayChat;
import com.example.cscot.R;
import com.example.cscot.WeiLe;
import com.example.cscot.databinding.FragmentMeBinding;
import com.example.cscot.databinding.FragmentStudymapBinding;

import android.content.Context;
import org.json.JSONArray;
import com.example.cscot.RtCallback;

import java.util.ArrayList;
import java.util.List;

public class StudymapFragment extends Fragment {
    private TextView selectedSubjectText;
    private TextView selectedKnowledgeText;
    private TextView selectedGradeText;
    private TextView studyRouteText;
    private FragmentStudymapBinding binding;
    private String lastmap;
    private List<String> Responses = new ArrayList<>();
    private boolean mapstatus = false;
    SharedPreferences getpreferences;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // 确保在 onCreate 中初始化 SharedPreferences
        getpreferences = WeiLe.mainActivity.getSharedPreferences("userPrefs", Context.MODE_PRIVATE);
    }

    public View onCreateView(@NonNull LayoutInflater inflater,
                             ViewGroup container, Bundle savedInstanceState) {
        StudymapViewModel StudymapViewModel =
                new ViewModelProvider(this).get(StudymapViewModel.class);

        binding = FragmentStudymapBinding.inflate(inflater, container, false);
        View root = binding.getRoot();
        selectedSubjectText = root.findViewById(R.id.selected_subject_text);
        selectedKnowledgeText = root.findViewById(R.id.selected_knowledge_text);
        selectedGradeText = root.findViewById(R.id.selected_grade_text);
        studyRouteText = root.findViewById(R.id.study_route_text);
        lastmap = getpreferences.getString("lastmap", "");
        mapstatus = getpreferences.getBoolean("mapstatus", false);
        return root;
    }

    @Override
    public void onResume() {
        super.onResume();
        // 在Fragment重新显示时更新TextView
        selectedGradeText.setText(WeiLe.gGrade + " /");
        selectedSubjectText.setText(WeiLe.gKeMu + " /");
        selectedKnowledgeText.setText(WeiLe.gKnowledge);
        // 根据gKnowledge设置studyRouteText的文本内容
        if (!WeiLe.gKnowledge.equals("")) {
            String studyRoute;
            if (mapstatus) {
                studyRoute = lastmap;
                studyRouteText.setText(studyRoute);
            } else {
                dynamicStudyRoute();
            }
        } else {
            studyRouteText.setText("不打无准备之仗，请先确定自己的学习目标！");
        }
    }

    private String dynamicStudyRoute() {
        String subject = getpreferences.getString("subject", "");
        String knowledge_point = getpreferences.getString("knowledge_point", "");
        LewayChat lewayChat = new LewayChat("DB_Ark");
        int initResult = lewayChat.initChat("");
        if (initResult != 0) {
            System.out.println("lewaychat初始化失败");
            return "";
        }
        lewayChat.prepareRole("你是一个友好的学习助手", new RtCallback() {
            @Override
            public void onRightTime(String strResult) {
                // 角色准备完成后的处理逻辑
                System.out.println("角色准备完成: " + strResult);
            }
        });
        JSONArray historyChat = new JSONArray();
        String userRequest = "请给我一个" + subject + knowledge_point + "学科的学习路线，返回正文即可不用任何其他内容，字数800字左右。" + "格式如下：\n"
                +"第一阶段：基础巩固（1-2个月）\n"
                +"目标：建立英语阅读的基础，提高词汇量和基本语法知识。\n\n"
                +"词汇积累：\n"
                +"每天背诵50个常用单词及其用法。\n"
                +"使用词汇应用（如Quizlet）进行词汇练习。\n"
                +"每周进行一次词汇测试，复习易错词汇。\n\n"
                +"语法学习：\n"
                +"系统学习基本语法知识，包括时态、从句、被动语态等。\n"
                +"完成基础语法练习题，每周进行一次语法小测验。\n\n"
                +"基础阅读：\n"
                +"阅读适合高中生的英文短篇故事或文章（如《英语周报》）。\n"
                +"完成每篇文章后的阅读理解题目，练习找出主旨和细节信息。\n"
                +"每天阅读一篇短文，做读后总结。\n\n"
                +"第二阶段：提高阶段（3-4个月）\n"
                +"目标：增强阅读速度和理解深度，提升对文章结构和主题的把握。\n\n"
                +"强化词汇和语法：\n"
                +"继续积累中高级词汇，每天背诵50个新单词。\n"
                +"深入学习高级语法结构，如虚拟语气、倒装句等。\n"
                +"结合实际阅读材料，进行语法分析和词汇应用。\n\n"
                +"提高阅读量：\n"
                +"阅读各类题材的文章，如新闻报道、科普文章、文学作品等。\n"
                +"每周完成3-4篇阅读理解练习，逐步提高阅读速度。\n"
                +"做阅读笔记，记录重要信息和生词。\n\n"
                +"阅读技巧训练：\n"
                +"学习和应用快速阅读技巧，如略读（skimming）和寻读（scanning）。\n"
                +"练习通过上下文猜测词义，培养语感和理解能力。\n"
                +"进行定时阅读训练，提高阅读速度和效率。\n\n"
                +"第三阶段：巩固与提升（5-6个月）\n"
                +"目标：提高对复杂文章的理解能力，增强解题技巧和答题速度。\n\n"
                +"高难度阅读：\n"
                +"阅读难度较高的文章，如学术论文、专业期刊、经典文学等。\n"
                +"每周进行一次高难度阅读训练，完成配套的阅读理解题目。\n"
                +"进行文章结构分析，理解文章的逻辑和论证方法。\n\n"
                +"阅读理解题型训练：\n"
                +"系统练习各类阅读理解题型，如主旨题、细节题、推理题、词义猜测题等。\n"
                +"总结常见题型的解题技巧和方法，提高答题准确率。\n"
                +"定期进行模拟测试，练习在限定时间内完成阅读理解题目。\n\n"
                +"总结与反思：\n"
                +"定期回顾学习内容，整理错题笔记，总结易错点和难点。\n"
                +"进行阶段性自我评估，调整学习计划和策略。\n"
                +"利用寒暑假时间进行集中复习和冲刺训练。\n\n"
                +"第四阶段：冲刺阶段（7-9个月）\n"
                +"目标：全面提升阅读理解能力，为高中考试和大学入学考试做好准备。\n\n"
                +"综合训练：\n"
                +"完成历年高考和模拟试题的阅读理解部分，逐渐适应考试难度和节奏。\n"
                +"进行综合性练习，每周进行一次模拟考试，检测学习效果。\n"
                +"针对错题进行深入分析和总结，巩固知识点。\n\n"
                +"强化答题技巧：\n"
                +"学习和应用快速定位信息的方法，提高答题速度和准确率。\n"
                +"练习阅读长篇文章，培养耐心和集中力，确保在考试中不掉链子。\n"
                +"做好时间管理，掌握合理分配阅读和答题时间的方法。\n\n"
                +"心理准备：\n"
                +"进行考前心理辅导，缓解紧张情绪，增强自信心。\n"
                +"模拟考试环境，熟悉考试流程和注意事项。\n"
                +"调整作息时间，保证充足的休息和良好的状态。\n";

        lewayChat.postChats(historyChat, userRequest, new RtCallback() {
            @Override
            public void onRightTime(String strResult) {
                // 将 AI 回复存储到列表中
                Responses.add(strResult);
                // 更新 lastmap
                updateLastMap();

                // 更新 UI
                if (getActivity() != null) {
                    getActivity().runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            String studyRoute = lastmap;
                            studyRouteText.setText("");
                            studyRouteText.setMaxWidth(studyRouteText.getWidth());
                            studyRouteText.setText(studyRoute);
                        }
                    });
                }
            }
        });
        return lastmap;
    }

    private void updateLastMap() {
        // 将 Responses 列表中的内容合并为一个字符串
        StringBuilder sb = new StringBuilder();
        for (String response : Responses) {
            sb.append(response);
        }
        lastmap = sb.toString(); // 更新 lastmap
        saveToSharedPreferences();
    }

    private void saveToSharedPreferences() {
        SharedPreferences.Editor editor = getpreferences.edit();
        editor.putString("lastmap", lastmap);
        editor.putBoolean("mapstatus", true); // 根据需要设置布尔值
        editor.apply(); // 提交更改
    }

    @Override
    public void onDestroyView() {
        super.onDestroyView();
        binding = null;
    }
}
